package priv.pattern.singletonpattern.enumclass;

/*
 * 作者：m鹏h
 * 时间；2024/6/5 22:05
 * 描述：使用枚举的方式实现单例模式
 **/
public class SingletonTest {
    /*
     * 原理：利用枚举的特性，Java枚举在创建时是线程安全的，并且只会装载一次。
       当使用枚举来实现单例模式时，代码实际上非常简单和直接。枚举在Java中是一种特殊的类，它有一组预定义的常量。由于Java枚举的特性，它们在创建时是线程安全的，并且只会装载一次，这使得它们成为实现单例模式的一种有效方式。
       缺点：无法进行懒加载。如果其他单例模式的实现有序列化需求时，需要注意防止反序列化导致的重新创建对象的问题。而枚举类型则没有这个问题。
       优点：实现简单，线程安全，且自动支持序列化机制，防止反序列化重新创建新的对象。
     * @author M鹏H
     * date 2024/6/5
     **/
    public static void main(String[] args) {
        // 获取单例对象
        Singleton singleton = Singleton.INSTANCE;

        // 调用单例对象的方法
        singleton.someMethod();

        // 尝试再次获取单例对象，将会得到与之前相同的实例
        Singleton anotherSingleton = Singleton.INSTANCE;

        // 检查两个引用是否指向同一个对象
        System.out.println("singleton == anotherSingleton: " + (singleton == anotherSingleton));
    }
}